package com.trans.service.impl;

import com.trans.dao.AccountDao;
import com.trans.domain.Account;
import com.trans.service.AccountService;
import javafx.beans.binding.DoubleExpression;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;

@Service
//
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    /**
     * 在Service里面可能会调用多个xxDao，当发生分母为0异常的时候，如果方法上或者类上有@Transactional，会回滚
     * 当发生IOException异常的时候，不会回滚，为什么？
     * 答：Spring的事务，只对Error异常和RunTimeException异常及其子类进行事务回滚，其他异常不会进行事务回滚
     * IO异常不属于上述异常，所以不会回滚，如果需要回滚，可以通过设置rollbackfor
     *
     * @param fromName
     * @param toName
     * @param money
     */
    @Transactional(rollbackFor = {IOException.class, FileNotFoundException.class})
    public void zhuanzhang(String fromName, String toName, Double money) throws IOException{
        accountDao.addMoney(toName,money);
        System.out.println("123");
        int i = 10/0;
        accountDao.minusMoney(fromName,money);

    }

    @Transactional(isolation = Isolation.READ_UNCOMMITTED)
    public List<Account> findAll() {
        List<Account> list = accountDao.findAll();
        return list;
    }
}
